(function($) {
    $.fn.certificate_container = function() {
        var url_img_wait = '/images/wait.gif';
        var url_img_refresh = '/images/refresh.png';
        var container_id = $(this).attr('id');

        function set_certificate(data) {
            $('#'+container_id).append('<div class="text_content"></div>');
            $('div.text_content', '#'+container_id).append(
                '<div class="certificate_spec">'
                    +'<div class="certificate_spec_title">'
                    +'Validity'
                    +'</div>'
                    +'<div class="certificate_spec_content">'
                    +data.valid_from+' - '+data.valid_to
                    +'</div>'
                    +'</div>'
                    +'<div class="certificate_spec">'
                    +'<div class="certificate_spec_title">'
                    +'Certificate Content'
                    +'<div id="certificate_download">'
                    +'<a href="/certificate/download" title="Download certificate!">'
                    +'<img src="/images/disc-floopy.png" />'
                    +'</a>'
                    +'</div>'
                    +'</div>'
                    +'<div class="certificate_spec_content">'
                    +'<div class="certificate_raw">'
                    +(data.certificate.replace(/\n/g, '<br />'))
                    +'</div>'
                    +'</div>'
                    +'</div>'
                    +'<div id="certificate_revoke">'
                    +'</div>'
            );

            $('div#certificate_revoke').html(
                '<a id="certificate_revoke_link" href="/ajax/certificate/revoke">Revoke certificate!</a>'
            );
            var revoke_link_confirmed = false;
            $('a#certificate_revoke_link').click(function() {
                if (revoke_link_confirmed) {
                    $.getJSON('/ajax/certificate/revoke', function(data) {
                        if (data.status == 'ok') {
                            $('#'+container_id).certificate_container();
                        }
                        else {
                            $('#'+container_id).html('');
                        }
                    });

                    return false;
                }
                else {
                    $(this).html('Really revoke certificate?');
                    $(this).closest('div').append(' <a id="certificate_revoke_link_cancel" href="#">Cancel</a>');

                    $('a#certificate_revoke_link_cancel').click(function() {
                        revoke_link_confirmed = false;
                        $('a#certificate_revoke_link').html('Revoke certificate!');
                        $(this).remove();

                        return false;
                    });
                    revoke_link_confirmed = true;
                    return false;
                }
            });
        }

        function parse_ajax_response(data) {
            $('div.text_content', '#'+container_id).remove();

            if (data.certificate != undefined) {
                set_certificate(data);
            }
            else {
                $('#'+container_id)
                    .append('<div class="text_content">No certificate stored on server.</div>');
            }
        }

        $(this).html(
            '<div class="dashboard_subtitle">'
                +'Certificate'
                +'</div>'
                +'<div class="text_content">'
                +'<img src="'+url_img_wait+'" class="img_wait" />'
                +'</div>'
        );

        $.getJSON('/ajax/certificate/get', function(data) {
            $('div.dashboard_subtitle', '#'+container_id).prepend(
                '<div class="div_refresh">'
                    +'<img src="'+url_img_refresh+'" class="img_refresh" />'
                    +'</div>'
            );

            $('img.img_refresh', 'div.dashboard_subtitle', '#'+container_id).click(function() {
                if ($(this).attr('src') == url_img_refresh) {
                    $(this).attr('src', url_img_wait);

                    $.getJSON('/ajax/certificate/get', function(data) {
                        $('.img_refresh', '#'+container_id).attr('src', url_img_refresh);
                        parse_ajax_response(data);
                    });
                }
            });

            parse_ajax_response(data);
        });
    };
})(jQuery);